// a Genetic Swap
// By Ben 02/10/2018

#include <iostream>
using namespace std;

template<typename T>
void GSwap(T &a, T &b){
	T tmp = b;
	b = a;
	a = tmp;
}

int main(){
	int i, j;
	double a, b;
	string s0, s1;

	i = 5;
	j = 8;

	a = 2.5;
	b = 3.5;

	s0 = "Hello";
	s1 = "World";

	std::cout << "Swap Ints" << endl;
	std::cout << "Before:" << endl;
	std::cout << "i = " << i << endl;
	std::cout << "j = " << j << endl;

	GSwap<int>(i, j);
	std::cout << "After:" << endl;
	std::cout << "i = " << i << endl;
	std::cout << "j = " << j << endl;

	std::cout << endl << "Swap Doubles" << endl;
	std::cout << "Before:" << endl;
	std::cout << "a = " << a << endl;
	std::cout << "b = " << b << endl;

	GSwap<double>(a, b);
	std::cout << "After:" << endl;
	std::cout << "a = " << a << endl;
	std::cout << "b = " << b << endl;

	std::cout << endl << "Swap Strings" << endl;
	std::cout << "Before:" << endl;
	std::cout << "s0 = " << s0.c_str() << endl;
	std::cout << "s1 = " << s1.c_str() << endl;

	GSwap<string>(s0, s1);
	std::cout << "After:" << endl;
	std::cout << "s0 = " << s0.c_str() << endl;
	std::cout << "s1 = " << s1.c_str() << endl;
	system("pause");
	return 0;
}